int NbCustomers = ...;
int Capacity = ...;
range Items = 1..18;
//customers demands
int Demand[Items] = ...;
//used in column generation
float Duals[Items] = ...;
//Pattern of routes that are generated.
//Some simple default pattern are given initially in transport.dat
tuple  pattern {
  key int id;//truck id
  int fill[Items];//fill[Items_i]=1 if the truck serves the customer_i
}
{pattern} Patterns = ...;
//Decision var, Route k (associated with pattern k)
dvar float Route[Patterns] in 0..1;
//master problem model
minimize
  sum(p in Patterns)
    Route[p];
subject to {
  forall( i in Items )
    ctFill:
      sum( p in Patterns )
         p.fill[i] * Route[p]>=1;
}
